๐ Java ์ค๊ธ 2ํธ: ์ปฌ๋ ์ ํ๋ ์์ํฌ ๋ง์คํฐ
NOTE
์๋ฃ๊ตฌ์กฐ๋ฅผ โ์ธ ์ค ์๋ ๋จ๊ณโ์์ โ์ธ์ ยท์ยท๋ฌด์์ ์ ํํด์ผ ํ๋์ง ์ค๋ช ํ ์ ์๋ ๋จ๊ณโ๋ก ๊ฐ๊ธฐ ์ํ ์ ๋ฆฌ โ ์ ๋ค๋ฆญ, List/Set/Map, Stack/Queue/Deque, ์ํ, ์ ๋ ฌ, Enum ์ปฌ๋ ์ , ๋ถ๋ณ ์ปฌ๋ ์ .
๐ ๊ฐ๋
1. ์ ๋ค๋ฆญ (Generic)
๐ ํต์ฌ ๋ชฉ์
- ์ปดํ์ผ ํ์ ํ์ ์์ ์ฑ
- ํ๋ณํ ์ ๊ฑฐ
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
List<String> list = new ArrayList<>();
// list.add(10); // ์ปดํ์ผ ์๋ฌ (์์ )๐ธ ์์ผ๋์นด๋ (?) โ PECS ์์น
PECS: Producer Extends, Consumer Super
| ํํ | ์๋ฏธ | ์ฌ์ฉ ๋ชฉ์ |
|---|---|---|
<? extends T> | T ๋๋ ์์ | ์ฝ๊ธฐ ์ ์ฉ |
<? super T> | T ๋๋ ๋ถ๋ชจ | ์ฐ๊ธฐ ์ ์ฉ |
void read(List<? extends Number> list) { } // get OK
void write(List<? super Integer> list) { } // add OKโ ๏ธ ํ์ ์ด๋ ์ด์ (Type Erasure)
- ์ ๋ค๋ฆญ ์ ๋ณด๋ ์ปดํ์ผ ํ์์๋ง ์กด์ฌ
- ๋ฐํ์์๋ ๋ชจ๋
Object - ๊ทธ๋์
new T()๋ถ๊ฐ๋ฅ,instanceof List<String>๋ถ๊ฐ๋ฅ
2. List ๊ณ์ด
ArrayList vs LinkedList
| ํญ๋ชฉ | ArrayList | LinkedList |
|---|---|---|
| ๋ด๋ถ ๊ตฌ์กฐ | ๋ฐฐ์ด | ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ |
| ์กฐํ(get) | โญ O(1) | โ O(n) |
| ์ค๊ฐ ์ฝ์ /์ญ์ | โ O(n) | โญ O(1) |
| ์ค๋ฌด ์ฌ์ฉ | โญโญโญโญโญ | ๊ฑฐ์ ์ ์ |
TIP
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ArrayList๊ฐ ์ ๋ต. LinkedList๋ ์ด๋ก ์ฉ์ ๊ฐ๊น๋ค.
3. Set & Hash ๊ตฌ์กฐ
Set ๊ณตํต ํน์ง
- ์ค๋ณต โ
- ์์ โ (๊ตฌํ์ฒด์ ๋ฐ๋ผ ์์ธ ์์)
hashCode + equals ํต์ฌ ์๋ฆฌ
1. hashCode() โ ๊ฐ์ ๋ฒํท
2. equals() โ ์ง์ง ๊ฐ์ ๊ฐ์ฒด์ธ์ง ํ์ธ๐ ๋ ์ค ํ๋๋ผ๋ ์๋ชป ๊ตฌํํ๋ฉด Set / Map ๋์์ด ๊นจ์ง
Set ๊ตฌํ์ฒด ๋น๊ต
| ๊ตฌํ์ฒด | ํน์ง |
|---|---|
| HashSet | ๊ฐ์ฅ ๋น ๋ฆ (O(1)) |
| LinkedHashSet | ์ ๋ ฅ ์์ ์ ์ง |
| TreeSet | ์ ๋ ฌ ์ ์ง (O(log n)) |
4. Map (์ค์ โญโญโญโญโญ)
Map = Set + Value
- Key = Set ๊ตฌ์กฐ
- Value๋ ๋ค
Map ๊ตฌํ์ฒด ์ ํ ๊ธฐ์ค
| ์ํฉ | ์ถ์ฒ |
|---|---|
| ์ฑ๋ฅ ์ต์ฐ์ | HashMap |
| ์ ๋ ฅ ์์ ํ์ | LinkedHashMap |
| ์ ๋ ฌ ํ์ | TreeMap |
โ ๏ธ Map Key ์ฃผ์์ฌํญ
Key ๊ฐ์ฒด๋ ๋ฐ๋์
hashCode(),equals()๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ผ๊ด๋๊ฒ ๊ตฌํํด์ผ ํจ
5. Stack & Queue & Deque
โ Stack ํด๋์ค ์ฐ์ง ๋ง์ธ์
- ๋ด๋ถ๊ฐ
Vector(๊ตฌ์๋ ์ ๋ฌผ) - ๋๊ธฐํ ๊ณผ๋ โ ์ฑ๋ฅ ๋์จ
โ ArrayDeque ํ๋๋ก ํด๊ฒฐ
| ์ฉ๋ | ๋ฉ์๋ |
|---|---|
| Stack | push(), pop() |
| Queue | offer(), poll() |
| Deque | offerFirst, offerLast |
Deque<Integer> dq = new ArrayDeque<>();TIP
Stack / Queue / Deque โ ArrayDeque
6. ์ํ (Iterable & Iterator) โญ ์ถ๊ฐ ์ค์
Iterator์ ์ง์ง ์๋ฏธ
์๋ฃ๊ตฌ์กฐ ๋ด๋ถ๋ฅผ ๋ชฐ๋ผ๋ ์ํ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ํ์ค ์ธํฐํ์ด์ค
Iterator<Integer> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}for-each์ ์ ์ฒด
for (int x : list) { }
// โ ๋ด๋ถ์ ์ผ๋ก Iterator ์ฌ์ฉโ ๏ธ Fail-Fast Iterator
- ์ํ ์ค ์ปฌ๋ ์
๊ตฌ์กฐ ๋ณ๊ฒฝ ์
ConcurrentModificationException - Iterator.remove()๋ง ํ์ฉ
7. ์ ๋ ฌ (Comparable & Comparator)
Comparable (์๊ธฐ ์์ ๊ธฐ์ค)
class Student implements Comparable<Student> {
public int compareTo(Student o) {
return this.score - o.score;
}
}Comparator (์ธ๋ถ ๊ธฐ์ค)
Comparator<Student> comp =
Comparator.comparing(Student::getScore)
.thenComparing(Student::getName);๐ ์ค๋ฌด ํต์ฌ: ๋ค์ค ์กฐ๊ฑด ์ ๋ ฌ (๋๋ค ๋ฒ์ )
students.sort(
Comparator.comparing(Student::getScore).reversed()
.thenComparing(Student::getName)
);TIP
๋ฉด์ ํฌ์ธํธ:
if๋น๊ต๋ณด๋ค Comparator ์ฒด์ด๋์ด ํจ์ฌ ๊ฐ๋ ์ฑ + ์์ ์ฑ ๋์
8. Collections ์ ํธ๋ฆฌํฐ ํด๋์ค โญ ์ถ๊ฐ
Collections.sort(list);
Collections.reverse(list);
Collections.shuffle(list);
Collections.max(list);
Collections.min(list);โ ๏ธ Collections โ Collection
Collection: ์ธํฐํ์ด์คCollections: ์ ํธ ํด๋์ค
9. Enum ์ ์ฉ ์ปฌ๋ ์ โญ ์ค๋ฌด ๊ฟํ
EnumSet
- ๋ด๋ถ๊ฐ ๋นํธ ์ฐ์ฐ
- HashSet๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
EnumSet<Day> days = EnumSet.of(MON, TUE);EnumMap
- Key๊ฐ Enum์ผ ๋ ์ต์
EnumMap<Day, String> map = new EnumMap<>(Day.class);10. ๋ถ๋ณ ์ปฌ๋ ์ (Java 9+) โญ ์ถ๊ฐ
List.of(1,2,3);
Set.of("A","B");
Map.of("a",1,"b",2);- ์์ ์
UnsupportedOperationException - ๋ฐฉ์ด์ ๋ณต์ฌ ๋์ฒด ๊ฐ๋ฅ
๐ฏ ๋ง๋ฌด๋ฆฌ ์์ฝ (์ง์ง ์ค์)
์ปฌ๋ ์ ์ ์ ์๋ค๋ ๊ฒ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ธ์ด๋ค๋ ๋ป์ด ์๋๋ผ
- โ ๋ฐ์ดํฐ ํน์ฑ์ ๋ง๋ ์ ํ
- โ ์ฑ๋ฅ/์์/์ค๋ณต ํ๋จ
- โ ๋ด๋ถ ์๋ฆฌ(hash, iterator, ์ ๋ ฌ)๋ฅผ ์ค๋ช ๊ฐ๋ฅ
์ด๋ผ๋ ๋ป์ด๋ค.
๊ด๋ จ ๋ฌธ์
- (ํ์ต/ํ๋ ์์ํฌ/Spring Framework) JAVA ์ ๋ฆฌ โ ์ด ์ปฌ๋ ์ ํ๋ ์์ํฌ ๋ ธํธ๋ฅผ Java ์ค๊ธ 2ํธ ์์ฝ์ผ๋ก ์์ถํด ๋ด์ ํตํฉ ์ ๋ฆฌ ๋ ธํธ